package mementoPattern

/**
 * 备忘录模式:
 * 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象
 * 恢复到原先保存的状态.
 *
 * 角色:
 * 发起人(Originator):该角色记录当前时刻的内布状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘数据.
 * 备忘录(Memento):该角色负责存储发起人角色的内部状态,在需要时提供发起人需要的内部状态数据.
 * 负责人(Caretaker):该角色对备忘录角色进行管理,保存和提供备忘录.
 *
 * 思考:
 * Activity被销毁后状态恢复是不是用的备忘录模式?
 */
fun main() {
    //定义一个需要备份状态的对象,默认状态为:状态1
    val originator = Originator("状态1")
    //定义备忘录创建负责人对象
    val caretaker = Caretaker()
    //通过负责人创建备忘录,把"状态1"在备忘录中保存起来
    caretaker.setMemento(originator.createMemento())
    //修改状态为:状态2
    originator.setState("状态2")
    //从备忘录中恢复保存的状态:状态1
    caretaker.getMemento()?.let { originator.restoreMemento(it) }
    //打印一下状态为:状态1
    PrintUtil.print(originator.getState())
}